#[test]
fn test_option_get_or_insert() {
    let mut opt: Option<i32> = None;
    assert_eq!(opt.get_or_insert(10), &10);
    assert_eq!(opt.get_or_insert(20), &10);
    opt = Some(30);
    assert_eq!(opt.get_or_insert(40), &30);
}

#[test]
fn test_option_as_ref() {
    let text: Option<String> = Some("Hello, world!".to_string());
    // 首先，使用 `as_ref` 将 `Option<String>` 转换为 `Option<&String>`，然后在 `map` 上消费它，在栈上留下 `text`。
    let text_length: Option<usize> = text.as_ref().map(|s| s.len());
    println!("text_length: {text_length:?}");
    println!("still can print text: {text:?}");
    println!("res = {}", text.unwrap())
}
